<?php
/********** 4.24 高效迭代处理大型数据集 ***********/

// 问题
// 希望迭代处理一个元素列表，不过整个列表会占用大量,或者生成整个列表的速度非常慢

// 解决方案
// 可以使用一个生成器

function fileLineGenerator($file)
{
    if (!$fh = fopen($file, 'r')) {
        return;
    }
    while (false !== ($line = fgets($fh))) {
        yield $line;
    }
    fclose($fh);
}

echo memory_get_usage();
$file = fileLineGenerator('log.txt');
echo PHP_EOL;

echo memory_get_usage();
echo PHP_EOL;


function fileLineGenerators($file)
{
    $result = [];
    if (!$fh = fopen($file, 'r')) {
        return;
    }
    while (false !== ($line = fgets($fh))) {
        $result[] = $line;
    }
    fclose($fh);
    return $result;
}



echo memory_get_usage();
$file = fileLineGenerators('log.txt');
echo PHP_EOL;
echo memory_get_usage();
echo PHP_EOL;


